package com.xbongbong.saas.service;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.domain.entity.ext.PaasFormDataEntityExt;
import com.xbongbong.paas.pojo.FieldAttrEntityForImport;
import com.xbongbong.paas.pojo.dto.FormDataAddDTO;
import com.xbongbong.paas.pojo.dto.FormDataListDTO;
import com.xbongbong.paas.pojo.dto.ImportFormDataDTO;
import com.xbongbong.paas.pojo.dto.SaasFormSaveDTO;
import com.xbongbong.paas.pojo.dto.ValidateDataDTO;
import com.xbongbong.paas.pojo.imports.CellTitlePojo;
import com.xbongbong.paas.pojo.imports.RowGroupPojo;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.applist.pojo.vo.ListAppVO;
import com.xbongbong.pro.businessdata.pojo.dto.FormatExplainDTO;
import com.xbongbong.pro.formdata.pojo.AfterSavePojo;
import com.xbongbong.pro.formdata.pojo.dto.SaasAnalysisDataDTO;
import com.xbongbong.pro.formexplain.pojo.dto.HandlerExplainInLinkItemDTO;
import com.xbongbong.pro.listbatch.pojo.dto.AddLabelDTO;
import com.xbongbong.pro.marketManage.pojo.dto.MarketActivityDeleteBatchDTO;
import com.xbongbong.pro.marketManage.pojo.dto.MarketActivityEditAttrUpdateDTO;
import com.xbongbong.pro.marketManage.pojo.dto.MarketActivitySearchDTO;
import com.xbongbong.pro.marketManage.pojo.dto.MarketActivityUpdateBatchDTO;
import com.xbongbong.pro.marketManage.pojo.vo.MarketActivityDeleteBatchVO;
import com.xbongbong.pro.marketManage.pojo.vo.MarketActivityEditAttrUpdateVO;
import com.xbongbong.pro.marketManage.pojo.vo.MarketActivitySearchVO;
import com.xbongbong.pro.marketManage.pojo.vo.MarketActivityUpdateBatchVO;

import java.util.List;


/**
 * @author chunyang.qin
 * @version v1.0
 * @date 2020.11.4
 * @since v1.0
 */
public interface MarketActivityService {
    /**
     *市场活动保存前saas特殊校验
     *
     * @param validateDataDTO saas特殊校验数据入参
     * @throws XbbException 业务异常
     * @author chunyang.qin
     * @date 2020/11/4
     */
    void beforeSave(ValidateDataDTO validateDataDTO) throws XbbException;

    /**
     * 市场活动保存后逻辑
     *
     * @param saasFormSaveDTO saas保存数据
     * @throws XbbException 业务异常
     * @author chunyang.qin
     */
    AfterSavePojo afterSave(SaasFormSaveDTO saasFormSaveDTO) throws XbbException;

    /**
     * 编辑时将获取数据格式化
     *
     * @param saasAnalysisDataDTO saas编辑数据
     * @param result               要返回的jsonobject
     * @throws XbbException 业务异常
     * @author chunyang.qin
     * @date 2020/11/4 15:28
     */
    void formatData(SaasAnalysisDataDTO saasAnalysisDataDTO, JSONObject result) throws XbbException;

    /**
     * 批量编辑某个字段
     * @author chunyang.qin
     * @date 2020/11/6 19:15
     * @param marketActivityEditAttrUpdateDTO
     * @return com.xbongbong.pro.customer.pojo.vo.MarketActivityEditAttrUpdateVO
     * @throws XbbException 业务异常
     */
    MarketActivityEditAttrUpdateVO batchEditAttr(MarketActivityEditAttrUpdateDTO marketActivityEditAttrUpdateDTO) throws XbbException;



    /**
     * 更新
     * @author chunyang.qin
     * @date 15:42 2020/11/6
     * @desrcption
     * @param marketActivityUpdateBatchDTO
     * @return void
     * @throws XbbException 业务异常
     */
    MarketActivityUpdateBatchVO marketActivityUpdateBatch(MarketActivityUpdateBatchDTO marketActivityUpdateBatchDTO) throws XbbException;

    /**
     * 批量删除市场活动
     * @author chunyang.qin
     * @date 2020/11/7 10:08
     * @param marketActivityDeleteBatchDTO
     * @return com.xbongbong.pro.customer.pojo.vo.CustomerDeleteBatchVO
     * @throws XbbException 业务异常
     */
    MarketActivityDeleteBatchVO deleteBatch(MarketActivityDeleteBatchDTO marketActivityDeleteBatchDTO) throws XbbException;

    ListAppVO formatMarketActivityAppList(FormDataListDTO formDataListDTO, List<PaasFormDataEntityExt> esEntities, Integer totalCount) throws XbbException;

    /**
     * 打开新建页面，格式化解释（赋初始值）
     *
     * @param formatExplainDTO 入参
     * @throws XbbException 异常
     */
    void formatAddExplain(FormatExplainDTO formatExplainDTO) throws XbbException;

    /**
     * 关联新建时格式化解释
     * @param handlerExplainInLinkItemDTO
     * @throws XbbException
     */
    void formatLinkAddExplain(HandlerExplainInLinkItemDTO handlerExplainInLinkItemDTO) throws XbbException;

    /**
     * 将Excel数据格式化成表单保存需要的JSON格式的数据
     *
     * @param importFormDataDTO 导入入参
     * @param titlePojoList     标题
     * @param rowGroupPojo      一个表单对应的一组Excel填写的数据
     * @param fieldAttrList     解释
     * @return FormDataAddDTO
     * @throws XbbException XbbException
     */
    FormDataAddDTO formatExcelValue(ImportFormDataDTO importFormDataDTO, List<CellTitlePojo> titlePojoList, RowGroupPojo rowGroupPojo, List<FieldAttrEntityForImport> fieldAttrList) throws XbbException;

    void updateBatchLabelAttr(AddLabelDTO addLabelDTO, List<PaasFormDataEntityExt> addBatchList, Boolean addOrDelete) throws XbbException;

    MarketActivitySearchVO getMarketName(MarketActivitySearchDTO marketActivitySearchDTO) throws XbbException;

    void afterSaveForWorkflow(SaasFormSaveDTO saasFormSaveDTO) throws XbbException;

    void afterSaveForUpdateWorkflow(SaasFormSaveDTO saasFormSaveDTO) throws XbbException;

    //    /**
//     * 根据市场活动id队列查找符合要求的市场活动列表
//     * @param corpid 公司ID
//     * @param marketActivityIds 市场活动id列表
//     * @throws XbbException 业务异常
//     * @return
//     */
//    List<MarketActivityEntityExt> getMarketActivityListByIds(String corpid, List<Long> marketActivityIds) throws XbbException;
//
//    /**
//     * 市场活动名称实时查重
//     *
//     * @param repeatCommonConditionDTO 查重共用条件
//     * @param marketActivityName             市场活动名称
//     * @return com.xbongbong.paas.pojo.vo.FormDataRepeatVO
//     * @author chunyang.qin
//     * @throws XbbException 业务异常
//     * @date 2020/11/4 13:47
//     */
//    FormDataRepeatVO checkRepeatForMarketActivityName(RepeatCommonConditionDTO repeatCommonConditionDTO, String marketActivityName) throws XbbException;
//
//    /**
//     * 更新
//     * @author chunyang.qin
//     * @date 15:42 2020/11/4
//     * @desrcption
//     * @param marketActivityUpdateBatchDTO 客户名称更新入参
//     * @return void
//     * @throws XbbException 业务异常
//     */
//    MarketActivityUpdateBatchVO marketActivityUpdateBatch(MarketActivityUpdateBatchDTO marketActivityUpdateBatchDTO) throws XbbException;
//
//    /**
//     * 格式化移动端列表页
//     *
//     * @param formDataListDTO 用户
//     * @param esEntities 业务实体集合
//     * @param totalCount 总数
//     * @return ListAppVO
//     * @throws XbbException
//     * @author long.rao
//     * @date 2019-03-11 13:50
//     */
//    ListAppVO formatCustomerAppList(FormDataListDTO formDataListDTO, List<PaasFormDataEntityExt> esEntities, Integer totalCount) throws XbbException;
//
//
//    /**
//     * 批量删除客户
//     * @author 吴峰
//     * @date 2019/3/14 10:08
//     * @param marketActivityDeleteBatchDTO
//     * @return com.xbongbong.pro.customer.pojo.vo.CustomerDeleteBatchVO
//     * @throws XbbException 业务异常
//     */
//    MarketActivityDeleteBatchVO deleteBatch(MarketActivityDeleteBatchDTO marketActivityDeleteBatchDTO) throws XbbException;
//
//    /**
//     * 批量编辑某个字段
//     * @author 吴峰
//     * @date 2019/3/18 19:15
//     * @param marketActivityEditAttrUpdateDTO
//     * @return com.xbongbong.pro.customer.pojo.voMarketActivityEditAttrUpdateVO
//     * @throws XbbException 业务异常
//     */
//    MarketActivityEditAttrUpdateVO batchEditAttr(MarketActivityEditAttrUpdateDTO marketActivityEditAttrUpdateDTO) throws XbbException;
//
//    /**
//     * 更改客户状态
//     *
//     * @param changeStatusDTO
//     * @throws
//     * @author long.rao
//     * @date 2019-04-15 20:41
//     */
//    BaseVO changeStatus(ChangeStatusDTO changeStatusDTO) throws XbbException;
//
//
//    /**
//     * 封装客户查重
//     * @param customerCheckRepeatDTO
//     * @return
//     */
//    AggregatedPage<PaasFormDataEntityExt> getDuplicateCustomer(CustomerCheckRepeatDTO customerCheckRepeatDTO) throws XbbException;
//
//    /**
//     * 将Excel数据格式化成表单保存需要的JSON格式的数据
//     *
//     * @param importFormDataDTO 导入入参
//     * @param titlePojoList     标题
//     * @param rowGroupPojo      一个表单对应的一组Excel填写的数据
//     * @param fieldAttrList     解释
//     * @return FormDataAddDTO
//     * @throws XbbException XbbException
//     */
//    FormDataAddDTO formatExcelValue(ImportFormDataDTO importFormDataDTO, List<CellTitlePojo> titlePojoList, RowGroupPojo rowGroupPojo, List<FieldAttrEntityForImport> fieldAttrList) throws XbbException;
//
//    /**
//     * 格式化导出值
//     *
//     * @param paasFormDataESList 数据
//     * @throws XbbException 异常
//     */
//    void formatExportValue(List<PaasFormDataEntityExt> paasFormDataESList, FormDataListDTO formDataListDTO, List<FieldAttrEntityForImport> fieldAttrList, Integer businessType) throws XbbException;
//
//    /**
//     * 编辑时格式化解释
//     *
//     * @param formatExplainDTO 入参
//     * @throws XbbException 异常
//     * @author long.rao
//     * @date 2019-06-15 13:59
//     */
//    void formatUpdateExplain(FormatExplainDTO formatExplainDTO) throws XbbException;
//
//    /**
//     * 业务规则之修改某些字段数据
//     * @param operationDTO
//     * @throws XbbException
//     */
//    void updateBatchByBusinessRule(OperationDTO operationDTO) throws XbbException;
//
//    void formatAddExplain(FormatExplainDTO formatExplainDTO) throws XbbException;
//
//    String getCutomerNameStr(List<Long> lackCustomerIdList, String corpid) throws XbbException;
//
//    void afterSaveForImport(SaasFormSaveDTO saasFormSaveDTO) throws XbbException;

}
